数据仓库项目中的数据建模和ETL日志体系
数据仓库项目跨功能需求开发不够完善,导致的各种问题,就我个人经验来说,主要体现在数据建模不够标准和ETL日志体系不够完善两个方面,本文会详细介绍一下,如何从跨功能需求的角度,构建标准的数据建模和完善的ETL日志体系。
Broadly, functional requirements define what a system is supposed to do and non-functional requirements define how a system is supposed to be. Functional requirements are usually in the form of “system shall do “, an individual action or part of the system, perhaps explicitly in the sense of a mathematical function, a black box description input, output, process and control functional model or IPO Model. In contrast, non-functional requirements are in the form of “system shall be “, an overall property of the system as a whole or of a particular aspect and not a specific function. The system’s overall properties commonly mark the difference between whether the development project has succeeded or failed.
Non-functional requirements are often called “quality attributes” of a system. Other terms for non-functional requirements are “qualities”, “quality goals”, “quality of service requirements”, “constraints”, “non-behavioral requirements”, or “technical requirements”. Informally these are sometimes called the “ilities”, from attributes like stability and portability. Qualities—that is non-functional requirements—can be divided into two main categories:
1. Execution qualities, such as safety, security and usability, which are observable during operation (at run time).
2. Evolution
qualities, such as testability, maintainability, extensibility and
scalability, which are embodied in the static structure of the system.
在数据仓库项目上,跨功能需求主要体现在以下几点:
服务器发生异常,数据发生异常,如何保证ETL的真正幂等性
数据源的数据变更与数仓脱节,如何做到数据问题事前发现,避免数据污染
数据指标的处理过程复杂,口径问题频发,如何做到清晰的血缘关系,快速排查
业务需求变更频繁,如何快速接入新的数据源,实现数据真正打通
数据量大,计算逻辑复杂,如何在规定的时间窗口内实现数据落地
针对以上数仓项目跨功能需求开发不够完善,导致的各种问题,就我个人经验来说,主要体现在数据建模不够标准和ETL日志体系不够完善两个方面,下面详细的介绍一下,如何从跨功能需求的角度,构建标准的数据建模和完善的ETL日志体系。
什么是数据建模
有助于降低数据处理各阶段的耦合程度,清晰的定义数据处理各阶段的界线,有助于提高用户追踪异常的效率,降低运维成本
有助于评估、分析及追踪数据在不同处理阶段所消耗的系统资源,不同层次可以使用不同的计算引擎或者存储,调整优化硬件配置
有助于数据复用,模型复用,降低开发成本,提高开发效率
数据建模的价值
对业务进行全方位的梳理,构建数据的全方位视角
通过对源系统的透彻理解,缩短重复开发时间
提高数据结果的准确性
提高透明度,使业务用户和开发人员能够了解他们可以获得的信息
有助于降低业务复杂度,降低数据处理各阶段的耦合度
有助于评估、分析及追踪数据在不同处理阶段所消耗的系统资源,并依此进行调整,优化硬件资源配置
数据建模的方法
数据建模的例子
需要重点考虑数据分层,使数据结构更清晰,便于维护。在本例中只是简单的举例了一个客户汇总需要ETL进行预计算
充分利用各数据库对不同数据类型的处理,事实表尽量使用整型
尽量少的使用可空,如果有空值,尽量提前处理。例如可在维度表中,创建一个ID为-1的记录,代表空值,事实表中如果查找不到维度,打上-1的标签
尽量考虑扩展,布尔型可以使用smallint代替,比如是否,男女类型的字段,未来有可能出现增加一个未知的记录
考虑到性能问题,在关系数据库中,不要使用物理的主键和外键,而是使用ETL保证数据的完整性和一致性
ETL日志的分级
调度级别,主要是ETL调度器所产生的日志,这部分日志主要依赖ETL调度器,大多数情况下,不会发生错误,例如现在比较流行的Azkaban
ETL级别,ETL运行日志,需要记录ETL内部的每个模块和ETL整体的运行情况,运行时间,维度表的错误处理,事实表运行了多少条数据,多少条成功,多少条失败,失败的原因等等,以流水账的形式记录,供运维人员查看,方便日后排查错误和性能调优。从这部分日志可以清晰的看到数据仓库的数据情况和源系统数据质量的变化
数据级别,这是数据仓库面向运维最重要的一部分日志,需要记录每个批次运行的数据范围,每个批次运行后的数据结果,实现了日志驱动数据仓库层与层之间的数据流动
ETL日志的处理
日志驱动数据
数据的完整性和一致性,在数据仓库的ETL处理过程中,数据库是没有事务的,为了满足ETL的幂等性,我们必须在ETL中手动处理事务,以解决服务器断电,网络闪崩等特殊情况下数据的完整性和一致性的问题
数据仓库的数据是分层存储的,我们需要日志表清晰的记录层与层之间的数据流动痕迹。例如:历史数据如果重新加载,上层预计算ETL如何重新运行,执行预计算的ETL决定是否重新加载历史数据
结束语
- 相关阅读 -
点击【阅读原文】可至洞见网站查看原文&绿色字体部分的相关链接。
本文版权属ThoughtWorks公司所有,如需转载请在后台留言联系。